package logika;

/* Soubor je ulozen v kodovani UTF-8.
 * Kontrola kódování: Příliš žluťoučký kůň úpěl ďábelské ódy. */
import java.util.ArrayList;
import java.util.Collection;

/*******************************************************************************
 * Instance třídy Vec představují věci obsažené ve hře. Tyto věci je možné sbírat či prozkoumávat.
 *
 * @author   Tomáš Koválik
 * @version  1.0
 */
public class Vec
{
    //== Datové atributy (statické i instancí)======================================
    private String nazev;
    private String popis;
    private int mnozstvi;
    private Vec klic;
    private boolean jePrenositelna =false; 
    private boolean jeRozbita = false;
    private boolean jeZamcena = false;
    private Collection<Vec> seznamVeci;
    //== Konstruktory a tovární metody =============================================

    /***************************************************************************
     *  Konstruktor vytváří věci do hry. Nastaví zda je věc přenositelná, a její název.
     *  
     *  @param    nazev, je jednoznačný identifikátor instance.
     *  @param    proměnná boolean, true pokud jde věc sebrat.
     */
    public Vec(String nazev,boolean jePrenositelna)
    {
        this.nazev = nazev;
        this.jePrenositelna = jePrenositelna;
        seznamVeci = new ArrayList<Vec>();
    }

    //== Nesoukromé metody (instancí i třídy) ======================================
   
    /**
     * Metoda nastavující kolik dané věci je.
     * 
     * @param mnozstvi
     */
    public void setMnozstvi(int mnozstvi){
        this.mnozstvi = mnozstvi;
    }

    /**
     * Metoda pro získání počtu (množství) dané věci...
     *
     * @return
     */
    public int getMnozstvi(){
        return mnozstvi;
    }

     /**
     * Metoda,která vrací hodnotu true, je-li věc možno sebrat.
     *
     * @return true, pokud je možné věc sebrat.
     */
    public boolean jePrenositelna (){
        return jePrenositelna;
    }

    /**
     * Metoda vrací název věci...
     */
    public String getNazev () {
        return nazev;
    }

    /**
     * Metoda, jež nastavuej popis ke každé věci...
     * 
     * @param popis předmětu...
     */
    public void setPopis(String popis){
        this.popis=popis;
    }

    /**
     * Metoda pro vrácení popisu...
     */
    public String getPopis(){
        return popis;
    }

    /**
     * Touto metodou nastavuji zakodování(zamčení) věci(trezoru)...
     * 
     * @param parametrem je boolean proměnná, jestli je vec zamčená...
     */
    public void zamknout (boolean jeZamcena){
        this.jeZamcena = jeZamcena;
    }

    /**
     * Metoda vrací zda je či není věc zakodovaná...
     */
    public boolean jeZamcena(){
        return jeZamcena;
    }

    /**
     * Tato metoda nastavuje, zda je daná věc rozbitá..
     * 
     * @param boolean atribut jeRozbita
     */
    public void rozbita (boolean jeRozbita){
        this.jeRozbita = jeRozbita;
    }

    /**
     * Metoda vrací, jestli je věc rozbitá či nikoli...
     */
    public boolean jeRozbita(){
        return jeRozbita;
    }

    /**
     * Nastavení klíče pro otevření trezoru...
     * 
     * @param klíč, který slouží k otevření truhly
     */
    public void setKlic (Vec klic){
        this.klic = klic;
    }

    /**
     * Metoda vrací nastaevný klíč...
     */
    public Vec getKlic (){
        return klic;
    }

    /**
     * Metoda, která vytváří vkládá instance třídy Vec do seznamu a tím do místností ve hře
     */
    public void vlozVec (Vec neco) {
        seznamVeci.add(neco);
    }

    

    /**
     * Metoda, jež procází seznam věcí v místnosti a pak je vypíše
     */
    public String getSeznamVeci () {
        String veci="";
        if (seznamVeci.size() == 0){
            veci = "nic jiného tu není";
        }
        else{
            for (Vec neco : seznamVeci) {
                veci = veci + neco.getNazev()+ " ";
            }
            veci = " a ještě jsem našel: " + veci;
        }
        return veci;
    }

    /**
     * Metoda pro získání seznamu věcí z věci:D. Slouží pro metodu prozkoumej.
     * 
     * @reutrn seznamVeci, Collecton<Vec>
     */
    public Collection<Vec> getVeci(){
        return seznamVeci;
    }

    /**
     * Metoda odebírá věc se seznamu věcí, které daný předmět obsahuje...
     */
    public Vec odeberVec (String nazev){
        Vec vec = null;
        for (Vec neco : seznamVeci) {
            if (neco.getNazev().equals(nazev)) {
                vec = neco;
                seznamVeci.remove(vec);
                break;
            }
        }
        return vec;
    }

    /**
     * Dotaz, zda daná věci obsahuje jinou...
     */
    public boolean obsahujeVec (String nazev){
        boolean nalezena = false;
        for (Vec neco : seznamVeci) {
            if (neco.getNazev().equals(nazev)) {
                nalezena = true;
                break;
            }
        }
        return nalezena;
    }
}
